package com.ssy.lingxi.after.sale.repository;

import com.ssy.lingxi.after.sale.entity.ReturnDeliveryGoodsDO;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

import java.util.List;

/**
 * 售后退货发货
 * @author 伍将
 * @date 2020/9/24
 * @version 2.0.0
 */
public interface ReturnDeliveryGoodsRepository extends JpaRepository<ReturnDeliveryGoodsDO, Long>, JpaSpecificationExecutor<ReturnDeliveryGoodsDO> {

    /***
     * 删除退货发货单
     * @author 伍将
     * @date 2020/9/24
     * @param returnId:
     * @param status:
     * @return void
     **/
    void deleteByReturnIdAndStatus(Long returnId, Integer status);

    /***
     * 根据退货id查询已存在退货发货条数
     * @author 伍将
     * @date 2020/9/24
     * @param returnId:
     * @return java.lang.Integer
     **/
    Integer countByReturnId(Long returnId);

    /***
     * 根据退货id与批次号查询当前退货发货单
     * @author 伍将
     * @date 2020/9/24
     * @param returnId:
     * @param batchNo:
     * @return com.ssy.lingxi.after.sale.entity.ReturnReturnDeliveryGoodsDO
     **/
    ReturnDeliveryGoodsDO findByReturnIdAndBatchNo(Long returnId, Integer batchNo);

    /**
     * 获取发货列表，并按批次排序
     * @author 伍将
     * @date 2021/2/19
     * @param returnId: 退货id
     * @return 发货信息列表
     **/
    List<ReturnDeliveryGoodsDO> findByReturnIdOrderByBatchNo(Long returnId);

    /**
     * 根据关联发货单id查询发货单
     * @author 伍将
     * @date 2021/1/4
     * @param id:
     * @return 发货单
     **/
    ReturnDeliveryGoodsDO findFirstById(Long id);

    /**
     * 根据关联入库单id查询发货单
     * @author 伍将
     * @date 2021/1/4
     * @param storageId:
     * @return 发货单
     **/
    ReturnDeliveryGoodsDO findFirstByStorageId(Long storageId);

    /**
     * 根据退货id查询非指定状态退货单是否存在
     * @author 伍将
     * @date 2021/1/8
     * @param returnId: 退货id
     * @param status: 内部状态 1-未确认退货发货 2-已确认退货发货 3-已确认退货收货 4-确认退货回单
     * @return:
     **/
    Boolean existsByReturnIdAndStatusNot(Long returnId, Integer status);
}